import { auth } from '@clerk/nextjs/server';
import { redirect } from 'next/navigation';

import { generateMetadata, getContent } from './metadata';

type Props = {
  params: Promise<{ sharecode: string }>;
  searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
};

export { generateMetadata };

export default async function SharePage({ params, searchParams }: Props) {
  const { getToken } = await auth();

  let accessToken = null;
  try {
    accessToken = await getToken();
  } catch (e) {
    console.log(e);
  }

  const resolvedParams = await params;

  let response;
  try {
    response = await getContent(resolvedParams.sharecode, accessToken);
  } catch (e) {
    console.error('Failed to load content', e);
    return redirect('/');
  }

  if (!response.content_type || !response.content_id) {
    return redirect('/');
  }

  const resolvedSearchParams = await searchParams;
  return redirect(
    `/${response.content_type}/${response.content_id}?sh=${resolvedParams.sharecode}${
      Object.keys(resolvedSearchParams).length > 0
        ? `&${new URLSearchParams(resolvedSearchParams as Record<string, string>).toString()}`
        : ''
    }`
  );
}
